// 登录状态管理工具
import http from '@/https/http.js'

// 检查是否已登录
export const isLogin = () => {
	const openid = uni.getStorageSync('openid')
	const user = uni.getStorageSync('user')
	// 优先判断 user 中是否有 openid，否则回退到单独的 openid 字段
	return !!(user && user.openid) || !!openid
}

// 全局登录检查方法
export const checkLogin = async (needNavigate = true) => {
	// 1. 检查本地缓存
	if (isLogin()) {
		return true
	}
	// 2. 缓存中没有则尝试获取
	try {
		// 获取登录凭证
		const {
			code,
			errMsg
		} = await uni.login({
			provider: 'weixin'
		})

		if (!code) {
			throw new Error(`获取code失败: ${errMsg}`)
		}

		// 调用登录接口
		const result = await http.post('MiniAut/Authorization', {
			code
		})

		// 现在后端返回的 result.data 可能是包含 openid、nickName、avatarUrl 的完整用户对象
		if (result && result) {
			const data = result
			console.log(data)
			// 保存整个用户对象到 storage，方便各页面读取
			uni.setStorageSync('user', data)
			// 为兼容旧代码，也单独保存 openid
			if (data.openId) {
				uni.setStorageSync('openid', data.openId)
			}
			return true
		} else {
			throw new Error('登录接口未返回数据')
		}
	} catch (error) {
		console.error('登录检查失败:', error)
		return false
	}
}

// 退出登录
export const logout = () => {
	uni.removeStorageSync('openid')
	uni.removeStorageSync('user')
	// 可以在这里添加其他清理操作，如清除用户信息等
}

// 读取用户对象
export const getUser = () => {
	try {
		const user = uni.getStorageSync('user')
		return user || null
	} catch (e) {
		return null
	}
}

// 覆写或设置用户对象（同步）
export const setUser = (user) => {
	if (!user) return
	uni.setStorageSync('user', user)
	if (user.openid) {
		uni.setStorageSync('openid', user.openid)
	}
}